<?php
/**
 * Powered By ThinkPHP 5.0.12
 * Copyright (c) 2017 http://www.bojuwang.net All rights reserved.
 * Created by PhpStorm.
 * Date: 2018/4/24 0024
 * Time: 上午 8:25
 * Author: NanTao <260053530@qq.com>
 */
namespace app\index\controller;
use think\Db;
class Prize extends Common
{
    /**
     * 幸运大转盘
     * @access public
     */
    public function index()
    {
        return $this->fetch();
    }
    /**
     * 中奖记录
     * @access public
     */
    public function log()
    {
        $userId = session('userId');
        $myList = Db::name('prize_log')->where('user_id',$userId)->select();
        $list = Db::name('prize_log')->select();
        $this->assign('list',$list);
        $this->assign('myList',$myList);
        return $this->fetch();
    }
    /*
    * 每次前端页面的请求，PHP循环奖项设置数组，
    * 通过概率计算函数get_rand获取抽中的奖项id。
    * 将中奖奖品保存在数组$res['yes']中，
    * 而剩下的未中奖的信息保存在$res['no']中，
    * 最后输出json个数数据给前端页面。
    */
    public function suan()
    {
        if (request()->isPost()) {
//            $uid = session('uid');
//            $goods = Db::name('xx_game_goods')->order('id asc')->select();
            $prize_arr = array(
                '0' => array('id' => 1, 'prize' => 1, 'v' =>10, 'jiadu' => array('0')),
                '1' => array('id' => 2, 'prize' => 2, 'v' => 20, 'jiadu' => array('120', '240')),
                '2' => array('id' => 3, 'prize' => 3, 'v' => 8, 'jiadu' => array('60', '180', '300')),
                '3' => array('id' => 4, 'prize' => '谢谢参与,再接再厉!', 'v' => 40, 'jiadu' => array('30', '90', '150', '210', '270', '330'))
            );
            foreach ($prize_arr as $key => $val) {
                $arr[$val['id']] = $val['v'];
            }
            $rid = $this->get_rand($arr); //根据概率获取奖项id
            $res['yes'] = $prize_arr[$rid - 1]['prize']; //中奖项
            $k = array_rand($prize_arr[$rid - 1]['jiadu']);
            $res['jiaodu'] = $prize_arr[$rid - 1]['jiadu'][$k]; //旋转角度
            /*if ($rid != 4) {
                $this->jianglog($res['yes'], 31);
            }*/
            $res['code'] = 0;
            $res['jinagji'] = $rid;
            exit(json_encode($res,320));
        }
    }
    /*
      * 经典的概率算法，
      * $proArr是一个预先设置的数组，
      * 假设数组为：array(100,200,300，400)，
      * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内，
      * 如果不在，则将概率空间，也就是k的值减去刚刚的那个数字的概率空间，
      * 在本例当中就是减去100，也就是说第二个数是在1，900这个范围内筛选的。
      * 这样 筛选到最终，总会有一个数满足要求。
      * 就相当于去一个箱子里摸东西，
      * 第一个不是，第二个不是，第三个还不是，那最后一个一定是。
      * 这个算法简单，而且效率非常 高，
      * 关键是这个算法已在我们以前的项目中有应用，尤其是大数据量的项目中效率非常棒。
      */
    public function get_rand($proArr)
    {
        $result = '';
        //概率数组的总概率精度
        $proSum = array_sum($proArr);
        //概率数组循环
        foreach ($proArr as $key => $proCur) {
            $randNum = mt_rand(1, $proSum);
            if ($randNum <= $proCur) {
                $result = $key;
                break;
            } else {
                $proSum -= $proCur;
            }
        }
        unset($proArr);
        return $result;
    }
    //中奖记录
    public function jianglog($content = '', $uid = '')
    {
        $data['uid'] = $uid;
        $data['content'] = $content;
        $data['status'] = 0;
        $data['create_at'] = time();
        Db::name('xx_jiang_log')->insert($data);
    }
}